﻿using System;
namespace Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg {
    
    
    [global::Xtee.Core.Attributes.XmlTypeAttribute(Name="detailandmed_v5_isikuandmed", Namespace="http://producers.arireg.xtee.riik.ee/producer/arireg", Target=typeof(DetailandmedV5Isikuandmed))]
    public class DetailandmedV5IsikuandmedSerializer : global::Xtee.Core.Types.AbstractXteeSerializable {
        
        protected IDetailandmedV5Isikuandmed clazz;
        
        public DetailandmedV5IsikuandmedSerializer(IDetailandmedV5Isikuandmed clazz) {
            this.clazz = clazz;
        }
        
        public override void WriteXml(global::Xtee.Core.IXteeXmlWriter Writer) {
            base.WriteXml(Writer);
            Writer.WriteStartElement("kaardile_kantud_isikud");
            if (clazz.KaardileKantudIsikud!=null) {
                global::Xtee.Core.SerializationMetadata metaKaardileKantudIsikud = this.GetMetaData(clazz.KaardileKantudIsikud);
                Writer.WriteTypeAttribute(metaKaardileKantudIsikud.TypeQualifiedName.Namespace, metaKaardileKantudIsikud.TypeQualifiedName.Name);
                metaKaardileKantudIsikud.NewSerializer(clazz.KaardileKantudIsikud).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : KaardileKantudIsikud");
            }
            Writer.WriteEndElement();
            if (clazz.EsindusoiguseNormaalregulatsioonid!=null) {
                Writer.WriteStartElement("esindusoiguse_normaalregulatsioonid");
                global::Xtee.Core.SerializationMetadata metaEsindusoiguseNormaalregulatsioonid = this.GetMetaData(clazz.EsindusoiguseNormaalregulatsioonid);
                Writer.WriteTypeAttribute(metaEsindusoiguseNormaalregulatsioonid.TypeQualifiedName.Namespace, metaEsindusoiguseNormaalregulatsioonid.TypeQualifiedName.Name);
                metaEsindusoiguseNormaalregulatsioonid.NewSerializer(clazz.EsindusoiguseNormaalregulatsioonid).WriteXml(Writer);
                Writer.WriteEndElement();
            }
            if (clazz.EsindusoiguseEritingimused!=null) {
                Writer.WriteStartElement("esindusoiguse_eritingimused");
                global::Xtee.Core.SerializationMetadata metaEsindusoiguseEritingimused = this.GetMetaData(clazz.EsindusoiguseEritingimused);
                Writer.WriteTypeAttribute(metaEsindusoiguseEritingimused.TypeQualifiedName.Namespace, metaEsindusoiguseEritingimused.TypeQualifiedName.Name);
                metaEsindusoiguseEritingimused.NewSerializer(clazz.EsindusoiguseEritingimused).WriteXml(Writer);
                Writer.WriteEndElement();
            }
            if (clazz.OsapandidTingimuslikudVoorandamised!=null) {
                Writer.WriteStartElement("osapandid_tingimuslikud_voorandamised");
                global::Xtee.Core.SerializationMetadata metaOsapandidTingimuslikudVoorandamised = this.GetMetaData(clazz.OsapandidTingimuslikudVoorandamised);
                Writer.WriteTypeAttribute(metaOsapandidTingimuslikudVoorandamised.TypeQualifiedName.Namespace, metaOsapandidTingimuslikudVoorandamised.TypeQualifiedName.Name);
                metaOsapandidTingimuslikudVoorandamised.NewSerializer(clazz.OsapandidTingimuslikudVoorandamised).WriteXml(Writer);
                Writer.WriteEndElement();
            }
            Writer.WriteStartElement("kaardivalised_isikud");
            if (clazz.KaardivalisedIsikud!=null) {
                global::Xtee.Core.SerializationMetadata metaKaardivalisedIsikud = this.GetMetaData(clazz.KaardivalisedIsikud);
                Writer.WriteTypeAttribute(metaKaardivalisedIsikud.TypeQualifiedName.Namespace, metaKaardivalisedIsikud.TypeQualifiedName.Name);
                metaKaardivalisedIsikud.NewSerializer(clazz.KaardivalisedIsikud).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : KaardivalisedIsikud");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("hooneyhistu_liikmed");
            if (clazz.HooneyhistuLiikmed!=null) {
                global::Xtee.Core.SerializationMetadata metaHooneyhistuLiikmed = this.GetMetaData(clazz.HooneyhistuLiikmed);
                Writer.WriteTypeAttribute(metaHooneyhistuLiikmed.TypeQualifiedName.Namespace, metaHooneyhistuLiikmed.TypeQualifiedName.Name);
                metaHooneyhistuLiikmed.NewSerializer(clazz.HooneyhistuLiikmed).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : HooneyhistuLiikmed");
            }
            Writer.WriteEndElement();
        }
        
        public override void ReadXml(global::Xtee.Core.IXteeXmlReader Reader) {
            base.ReadXml(Reader);
            if (Reader.LocalName=="kaardile_kantud_isikud") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_isikuandmed>kaardile_kantud_isikud");
                }
                global::Xtee.Core.SerializationMetadata metaKaardileKantudIsikud = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5KaardileKantudIsikud>(Reader, "detailandmed_v5_kaardile_kantud_isikud", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.KaardileKantudIsikud = metaKaardileKantudIsikud.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5KaardileKantudIsikud>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("kaardile_kantud_isikud");
                    metaKaardileKantudIsikud.NewSerializer(clazz.KaardileKantudIsikud).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_isikuandmed>kaardile_kantud_isikud", Reader.LocalName);
            }
            if (Reader.LocalName=="esindusoiguse_normaalregulatsioonid") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_isikuandmed>esindusoiguse_normaalregulatsioonid");
                }
                global::Xtee.Core.SerializationMetadata metaEsindusoiguseNormaalregulatsioonid = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5EsindusoiguseNormaalregulatsioonid>(Reader, "detailandmed_v5_esindusoiguse_normaalregulatsioonid", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.EsindusoiguseNormaalregulatsioonid = metaEsindusoiguseNormaalregulatsioonid.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5EsindusoiguseNormaalregulatsioonid>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("esindusoiguse_normaalregulatsioonid");
                    metaEsindusoiguseNormaalregulatsioonid.NewSerializer(clazz.EsindusoiguseNormaalregulatsioonid).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            if (Reader.LocalName=="esindusoiguse_eritingimused") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_isikuandmed>esindusoiguse_eritingimused");
                }
                global::Xtee.Core.SerializationMetadata metaEsindusoiguseEritingimused = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5EsindusoiguseEritingimused>(Reader, "detailandmed_v5_esindusoiguse_eritingimused", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.EsindusoiguseEritingimused = metaEsindusoiguseEritingimused.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5EsindusoiguseEritingimused>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("esindusoiguse_eritingimused");
                    metaEsindusoiguseEritingimused.NewSerializer(clazz.EsindusoiguseEritingimused).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            if (Reader.LocalName=="osapandid_tingimuslikud_voorandamised") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_isikuandmed>osapandid_tingimuslikud_voorandamised");
                }
                global::Xtee.Core.SerializationMetadata metaOsapandidTingimuslikudVoorandamised = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5OsaPandid>(Reader, "detailandmed_v5_osa_pandid", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.OsapandidTingimuslikudVoorandamised = metaOsapandidTingimuslikudVoorandamised.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5OsaPandid>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("osapandid_tingimuslikud_voorandamised");
                    metaOsapandidTingimuslikudVoorandamised.NewSerializer(clazz.OsapandidTingimuslikudVoorandamised).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            if (Reader.LocalName=="kaardivalised_isikud") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_isikuandmed>kaardivalised_isikud");
                }
                global::Xtee.Core.SerializationMetadata metaKaardivalisedIsikud = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5KaardivalisedIsikud>(Reader, "detailandmed_v5_kaardivalised_isikud", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.KaardivalisedIsikud = metaKaardivalisedIsikud.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5KaardivalisedIsikud>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("kaardivalised_isikud");
                    metaKaardivalisedIsikud.NewSerializer(clazz.KaardivalisedIsikud).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_isikuandmed>kaardivalised_isikud", Reader.LocalName);
            }
            if (Reader.LocalName=="hooneyhistu_liikmed") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_isikuandmed>hooneyhistu_liikmed");
                }
                global::Xtee.Core.SerializationMetadata metaHooneyhistuLiikmed = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5HooneyhistuLiikmed>(Reader, "detailandmed_v5_hooneyhistu_liikmed", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.HooneyhistuLiikmed = metaHooneyhistuLiikmed.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5HooneyhistuLiikmed>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("hooneyhistu_liikmed");
                    metaHooneyhistuLiikmed.NewSerializer(clazz.HooneyhistuLiikmed).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_isikuandmed>hooneyhistu_liikmed", Reader.LocalName);
            }
        }
    }
}
